package com.sjj.cp.client;

import java.util.List;












import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.uibinder.client.UiHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.rpc.AsyncCallback;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Composite;
import com.google.gwt.user.client.ui.FlexTable;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.Widget;
import com.sjj.cp.client.server.FormulaService;
import com.sjj.cp.shared.FormulaListado;
import com.sjj.cp.shared.UsuarioGWT;


public class ListaFormula extends Composite {
	
	private static ListaFormulaUiBinder uiBinder = GWT.create(ListaFormulaUiBinder.class);
	DetalleFormula detalle;
	
	interface ListaFormulaUiBinder extends UiBinder<Widget, ListaFormula> {
	}
	
	@UiField
	Label labelMensaje;
	
	@UiField
	FlexTable tabla;
	
	@UiField
	Button agregar;
	
	
	com.sjj.cp.client.AgregarFormula agregarFormula = null;

	//Constructor todo esto se agrega apenas se invoca o se hace visible
	//para traer las formulas como listas usando el async  trayendolas
	//desde la base de datos usando el metodo de esta misma clase
	//AgregarFormula
	
	public ListaFormula(com.sjj.cp.client.AgregarFormula agregarFormula) {
		initWidget(uiBinder.createAndBindUi(this));
		tabla.setText(0, 0, "Formula");
		tabla.setText(0, 1, "Fecha Creada");
		tabla.setText(0, 2, "Fecha Vencimiento");
		tabla.setText(0, 3, "Estado");
		tabla.setText(0, 4, "Acciones");
		
		tabla.getCellFormatter().setWidth(0, 0, "100px");
		tabla.getCellFormatter().setWidth(0, 1, "200px");
		tabla.getCellFormatter().setWidth(0, 2, "200px");
		tabla.getCellFormatter().setWidth(0, 3, "200px");
		tabla.getCellFormatter().setWidth(0, 4, "50px");
		
		tabla.getRowFormatter().addStyleName(0, "tablaHeader");
		
		FormulaService.Util.getInstance().obtenerFormulas(new AsyncCallback<List<FormulaListado>>() {
			
			@Override
			public void onSuccess(List<FormulaListado> result) {
				System.out.println("EXITO");
				if(result.size() == 0)
					mostrarMensaje("No hay Formulas en la base de datos");
				
				for(FormulaListado formula : result){
					agregarFormula(formula);
				}
			}
			
			@Override
			public void onFailure(Throwable caught) {
				System.out.println("FALLO");
				caught.printStackTrace();
				System.out.println(caught.getMessage());
				mostrarMensaje(caught.getMessage());
			}
		});
		
		//SOLO EL MEDICO PUEDE INGRESAR FORMULAS AL SISTEMA
		System.out.println("ROL DE USUARIO: "+UsuarioGWT.getInstancia().getRol());
		if(UsuarioGWT.getInstancia().getRol().equals("MED")){
			agregar.setVisible(true);
		}else{
			agregar.setVisible(false);
		}		
		
		this.agregarFormula = agregarFormula;
	}
	
	@UiHandler("agregar")
	void onClick(ClickEvent ce){		
		agregarFormula.setVisible(true);		
		this.setVisible(false);
	}
	
	private void mostrarMensaje(String mensaje){
		labelMensaje.setVisible(true);
		labelMensaje.setText(mensaje);
	}	

	//todo lo que esta en comentario abajo es la implementacion de asyn
	//para eliminar la formula
	
	public void agregarFormula(final FormulaListado formula){		
	
		final int indice = tabla.getRowCount();
		System.out.println("id formula: "+formula.getId());
		tabla.setText(indice, 0, formula.getId());
		tabla.setText(indice, 1, formula.getFechaExpedicion().toString());
		tabla.setText(indice, 2, formula.getFechaVencimiento().toString());
		tabla.setText(indice, 3, formula.getEstado());
	
		
//	colocaremos un boton Consultar y otro Eliminar para cada formula	
		Button consultar = new Button("Consultar");
		consultar.addClickHandler(new ClickHandler(){

			@Override
			public void onClick(ClickEvent event) {
				// TODO Auto-generated method stub
				mostrarConsulta(formula);
			}
			
		});
//			tabla.setWidget(indice, 4, botonEliminar);
			consultar.setVisible(true);
			tabla.setWidget(indice, 4, consultar);
//		}
	}
	
	
	public void setLista(DetalleFormula lista){
		this.detalle = lista;
	}
	
	private void mostrarConsulta(FormulaListado formula){	
		detalle.setFormula(formula);
		detalle.setVisible(true);
		this.setVisible(false);
	}

}
